hosts_config(){
    test_hosts_config
}
#/etc/hosts.allow文件指定允许连接到主机的IP地址，不应配为ALL:ALL。/etc/hosts.deny文件指定禁止连接到主机到IP，应该配置为ALL:ALL默认禁止所有连接。 两者需要配合使用，且必须先配置/etc/hosts.allow规则。若是已通过其他方式实现如网络安全组、防火墙等，可自行举证并忽略此项。
#配置hosts.deny前请确保hosts.allow已经正确配置，否则会导致无法远程访问主机1、执行录入规则命令（＜net＞/＜mask＞，代表需要访问该服务器的网段，例如："192.168.1.0/255.255.255.0"）：echo "ALL: ＜net＞/＜mask＞, ＜net＞/＜mask＞, ..." ＞/etc/hosts.allow 2、执行录入规则命令：echo "ALL: ALL" >> /etc/hosts.deny

minimal_install(){
    test_minimal_install
}
#应卸载NetworkManager、avahi-daemon、bluetooth、firstboot、kdump、wdaemon、wpa_supplicant、ypbind等软件
#卸载不必要的组件和程序，如NetworkManager、bluetooth、firstboot、wpa_supplicant、ypbind、kdump、avahi-daemonyum remove avahi yum remove   kexec-tools yum remove *bluetooth* yum remove NetworkManager* yum remove firstboot yum remove wpa_supplicant yum remove ypbind

off_unneeded_services_port(){
    test_off_unneeded_services_port
}
#1）应关闭不需要的系统服务、文件共享服务2）关闭21 、23、25、111、427、631等高危端口如有特殊需求必须严格配置访问控制策略，需自行举证和忽略。
#查看已经启动的或者是手动的系统服务，停止一些不必要的服务： 1、如使用命令关闭Telnet、RSH、SMB、Talk服务服务：systemctl disable telnet.socket systemctl disable rsh.socket systemctl disable smb systemctl disable ntalk systemctl stop telnet.socket systemctl stop rsh.socket systemctl stop smb systemctl stop ntalk 2、禁用NFS和RPC服务systemctl stop rpcbind.socket    systemctl disable rpcbind.socket    systemctl stop nfs     systemctl stop rpcbind    systemctl disable nfs     systemctl disable rpcbind    systemctl stop nfs-server    systemctl disable nfs-server 3、禁用IMAP和POP3服务 systemctl stop dovecot systemctl disable dovecot 4、关闭21 、23、25、111、427、631端口

audit_and_logging(){
    test_audit_and_logging
}
#1、启用auditd服务 2、启用rsyslog或syslog-ng服务 3、确保收集用户的文件删除事件 4、确保收集对系统管理范围（sudoers）的更改 5、确保收集修改用户/组信息的事件如使用了第三方日志收集服务，可自行举证并忽略此项。

audit_other(){
    test_audit_other
}

audit_log_storage_size(){
    test_audit_log_storage_size
}
#检查auditd文件大小、日志拆分配置或者备份至日志服务器。若自动修复失败，请先修复另外一个检查项：启用安全审计功能
#可通过日志文件分隔备份或者远程服务器日志备份来实现，以下两种方式之一修复加固： 1、编辑/etc/audit/auditd.conf，添加或编辑以下配置内容：log_format定义了log日志的储存方式 log_format = RAW log file的文件数量，设为5-10之间 num_logs = 5 max_log_file定义单个日志文件最大size，单位MB，设为5-50

audit_rsyslog_run(){
    test_audit_rsyslog_run
}
#auditd是审计进程audit的守护进程，syslogd是日志进程syslog的守护进程，查看系统进程是否启动
#1、执行命令启用auditd服务：service auditd start ,如未安装，则执行命令进行安装：apt-get install auditd；2、执行命令启用rsyslog服务 ： service rsyslog start

default_accounts(){
    test_default_accounts
}
#1、Linux下root账号不应删除，检查是否禁止SSH直接登陆即可2、root之外的系统默认帐户、数据库帐户禁止登陆(non-login)3、确保无弱密码存在，对应的弱密码基线检测通过
#(注意：禁止root账户登陆前确保有其他账户可以正常使用)编辑配置文件/etc/ssh/sshd_config，将PermitRootLogin yes 改为PermitRootLogin no2、执行service  sshd restart重启ssh3、root之外的系统默认帐户、数据库帐户禁止登陆(non-login)4、确保所有系统用户的密码都设置为复杂密码

importance_file_permissions(){
    test_importance_file_permissions
}
#检查重要文件，如访问控制配置文件和用户权限配置文件的权限，是否达到用户级别的粒度
#1、执行以下4条命令：chown root:root /etc/hosts.allow chown root:root /etc/hosts.deny chmod 644 /etc/hosts.deny chmod 644 /etc/hosts.allow 2、执行以下5条命令chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow chmod 0644 /etc/group chmod 0644 /etc/passwd chmod 0400 /etc/shadow chmod 0400 /etc/gshadow 3、设置 /etc/ssh/sshd_config 的权限：chown root:root /etc/ssh/sshd_config chmod 600 /etc/ssh/sshd_config 4、配置/etc/profile文件权限：chown root:root /etc/profile chmod 644 /etc/profile

user_permissions(){
    test_user_permissions
}
#1、除系统管理用户之外，应该分配普通用户、审计员、安全员帐户； 2、确保用户umask为027或更严格；3、确保每个用户的home目录权限设置为750或者更严格。
#1、除系统管理用户之外，应该分配普通用户、审计员、安全员帐户；2、检查/etc/bashrc和/etc/profile文件中uamsk值是否设置为027或更严格，否则添加或编辑umask参数： umask 027 执行命令：source /etc/profile；3、确保每个用户的home目录权限设置为750或者更严格

unused_accounts(){
    test_unused_accounts
}
#1、root之外的系统默认帐户、postgres之外的数据库帐户禁止登陆(non-login)2、锁定或删除shutdown、halt帐户
#1、root之外的系统默认帐户、postgres之外的数据库帐户禁止登陆(non-login) 2、锁定或删除shutdown、halt帐户：usermod -L shutdownusermod -L halt

sudo_access(){
    test_sudo_access
}
#1、确保su命令的访问受限制2、检查/etc/sudoers配置sudo权限的用户，根据需要给root以外用户配置sudo权限，但除管理员外不能所有用户都配置(ALL)权限。
#1、确保su命令的访问受限制，编辑 /etc/pam.d/su 文件添加：auth required pam_wheel.so use_uid 在/etc/group文件中创建一个逗号分隔的用户列表：wheel:x:10:root,＜user list＞ 2、检查/etc/sudoers配置sudo权限的用户，不能所有用户都配置(ALL)权限

access_control_policy() {
    test_access_control_policy
}

#1、确保用户home目录权限设置为750或者更严格2、无主文件或文件夹的所有权，根据需要重置为系统上的某个活动用户3、设置ssh主机公钥文件的权限和所有权4、设置ssh主机私钥文件的权限和所有权
#1、确保用户home目录权限设置为750或者更严格find /etc/ssh -xdev -type f -name 'ssh_host_*_key.pub' -exec chmod 0644 {} \; find /etc/ssh -xdev -type f -name 'ssh_host_*_key.pub' -exec chown root:root {} \; 2、运行以下命令以设置ssh主机公钥文件的权限和所有权：3、运行以下命令以设置ssh主机私钥文件的权限和所有权：find /etc/ssh -xdev -type f -name 'ssh_host_*_key' -exec chmod 0600 {} \; find /etc/ssh -xdev -type f -name 'ssh_host_*_key' -exec chown root:root {} \; 
password_security(){
    test_password_security
}
#检查以下内容：1、检查是否存在空密码账户；2、身份标识(UID)具有唯一性;3、设置密码复杂度要求；4、定期更换密码；5、设置密码最短修改时间，防止非法用户短期更改多次；6、限制密码重用；7、确保root是唯一的UID为0的帐户
#1、 检查空密码账户并处理 2、查看/etc/passwd，检查是否有重复UID的用户并清理 3、安装PAM的cracklib模块，执行命令：apt-get update&&apt-get install libpam-cracklib , 编辑/etc/pam.d/common-password，在"password requisite pam_cracklib.so"开头的这一行配置minclass，设置为3或4，即在行末尾加上参数minclass=3；在password [success=1 default=ignore] pam_unix.so开头的这一行增加配置minlen（密码最小长度）设置为8-32位，建议为9，即在行末尾加上参数minlen=9 4、在/etc/login.defs中将 PASS_MAX_DAYS 参数设置为 30-90之间，如 PASS_MAX_DAYS 90。需同时执行命令设置root密码失效时间： chage --maxdays 90 root 5、置密码最短修改时间，在 /etc/login.defs 中将PASS_MIN_DAYS参数设置为 7-14之间，如 PASS_MIN_DAYS 7。需时执行命令为root用户设置：chage --mindays 7 root  6、编辑/etc/pam.d/common-password，在password [success=1 default=ignore] pam_unix.so开头的这一行增加配置remember设置为5-24之间，建议为5，即在行末尾加上参数remember=5 7、除root以外其他UID为0的用户，都应该删除或者修改其UID

login_security(){
    test_login_security
}
#检测是否配置登陆失败锁定策略，是否设置空闲会话断开时间和启用登陆时间过期后断开与客户端的连接设置
#1、配置登陆失败锁定策略，编辑/etc/pam.d/common-auth，在非注释行的第一行添加以下行（deny为连续失败次数，配置为3-8次，unlock_time为解锁时间，配置为600-1800秒）auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900设置系统登陆不活动连接超时退出，编辑/etc/profile，将TMOUT 设置为300到1800，即5-30分钟TMOUT=900 3、在/etc/ssh/sshd_config中取消MaxAuthTries注释符号#，设置最大密码尝试失败次数3-6，建议为5：MaxAuthTries 5

disable_telnet(){
    test_disable_telnet
}
#检查SSHD是否强制使用V2安全协议(Centos7无需配置)；禁止Telnet等不安全的远程连接服务。
#1、编辑 /etc/ssh/sshd_config 文件设置参数(Centos7/8无需配置)：Protocol 2 2、执行命令service sshd restart重启sshd服务 3、执行以下命令停止Telnet服务：systemctl stop telnet.socket systemctl disable telnet.socket 

